perm filename VISION.LAN[DOC,TOB] blob
sn#073673 filedate 1973-11-19 generic text, type T, neo UTF8
00100 TOB,RBC,RHT,
00200 BLB,JAF,WAP,DBA
00300
00400 Data Types
00500 PICTURE-TV buffer
00600 raster of bytes in memory
00700 device (TV,file,memory)
00800 access info
00900 window ptr
01000 transform
01100 WINDOW
01200 part of a buffer
01300 PICTURE ptr
01400 x relative to PICTURE
01500 y relative to PICTURE
01600 nx
01700 ny
01800 transform ptr
01900 PIX ELEMENT indexed i,j with respect to a window
02000
02100 TRANSFORM
02200
02300 INVERSE TRANSFORM
02400
02500 RAY IN SPACE
02600
02700 MODELS
02800 WORLD MODEL-YYY
02900 PARTS MODELS TOB,BGB,RCB,RHT
03000
03100 FOR LASER DATA
03200 FOR EDGE OPERATOR
03300 FOR CURVES-SPLINE
03400 FOR LINE DRAWINGS
03500 FOR DISPLAY-HIDDEN LINE EDGE DATA
00100 Operations and operators
00200
00300 CORRELATION OPERATIONS
00400 1. Correlation-bulk
00500 local, with small windows
00600 global, with construction of a global transform from patches
00700 2. Feature correlation
00800 edge points
00900
01000 EDGES AND REGIONS
01100 3. Edge point scan
01200 4. Corner Finder
01300 5. Differencing
01400 6. Contouring
01500 7. Yoram's region grower
01600 8. region growing
01700 global
01800 incremental
01900 9. verification type operations
02000 edge in a direction
02100 edge at a vertex
02200 edge termination
02300 10. optimal curve edge detection
02400 11. Hueckel edge operator
02500 12. color edges
02600
02700 CURVE TYPE OPERATORS
02800 13. curve fitting
02900 14. corner fitting
03000 15. arcs and spline
03100 16. straight line finding slope-intercept space
03200 17. edge follower
03300
03400 overhead functions
03500 window
03600 camera adjustment and servo
03700 calibration
03800 focus
03900
04000 laser
04100 point laser
04200 read nonzero pts
04300 depth discontinuity
04400 slope discontinuity
04500
04600 STEREO
04700 bulk correlation
04800 feature point
04900 TEXTURE
05000
05100 PREDICTION
05200 DISPLAYS
05300 TRANSFORMS
00100 Coding conventions
00200 1. All data structures should be dumpable and readable
00300 2. Separate input/output from processing
00400 3. Files should have symbolic data-type labels
00500 4. All references to data structures should be symbolic
00600 with access functions or macros defined, in order
00700 to allow changes readily.
00100 From NIH vision language
00200
00300 Major primitive image analysis operations
00400 Tape access
00500 Disk Input
00600 Disk output
00700 array allocation
00800 array printout
00900 array statistics
01000 max,min,area,centroid,weighted centroid,variance
01100 higher order moments of blobs
01200 thresholding
01300 boolean array operations
01400 boundary tracing
01500 bit counting
01600 blob extraction
01700 shifting
01800 rotation
01900 texture
02000 two-dimensional derivative
00100 Appendix I. Vision primitives
00200
00300 This is a partial list of the visual primitives that would
00400 be "known" to the system
00500
00600 Camera primitives
00700
00800 cxf ← AIMING_INFO(camera number,locn in table coords,lens);
00900
01000 Creates a record, cxf, which contains all information needed to point
01100 the specified camera at the specified point, using the specified lens
01200 and filter. cxf will also contain a camera transform and an inverse
01300 transform, and other similar information such as might normally be
01400 found in the hand-eye picture format. Initially, the limits of the
01500 picture are as wide as possible.
01600
01700 POINT_CAMERA(cxf,filter)
01800
01900 Points & focusses a camera as specified by cxf. Filter is optional
02000
02100 pic←TVTAKE(cxf,bits,tclip,bclip)
02200
02300 Takes a tv picture. For the moment assume always get 6 bit pictures.
02400 In addition to the picture, pic gets info pointing at cxf.
02500
02600 locn3d ← TV2W(cxf,tvcoords,plane)
02700
02800 produces the 3D coordinates of a point lieing in the specified plane
02900 that would have the specified tv coordinates, given the specified
03000 camera transformation.
03100
03200 tvcs ← W2TV(cxf,locn)
03300
03400 predicts tv coordinates.
03500
03600 Laser primitives
03700
03800 lsxf ← LASER_PLANE(locn,theta)
03900
04000 lsxf gets set to a record that contains the laser pointing information
04100 and the plane equation coefficients (Ax+By+Cz+D=0, with |(A,B,C)|=1)
04200 for a laser scan at angle theta through location locn.
04300
04400 {{ lsscn↓i }} ← LASER_TAKE(cxf,{{ lsxf↓i }})
04500
04600 produces a list of segmented and thinned results from taking the requested
04700 laser scans with the specified cameras.
04800
04900 lsccnlst ← GPTRIM(lsscnlst2)
05000
05100 subtracts out the ground plane segments from the scan list
05200
05300 correctionxf ← LASER_LOCATE(lsscnlst,object_model,feature_name)
05400
05500 This very powerful primitive uses the specified scan list, together
05600 with the object model, to find the appropriate correction transform
05700 to transform the named feature to its actual 3-space location.
05800 An alternative form of this would allow the primitive itself
05900 to control the laser deflection apparatus and/or the tv cameras.
06000
00100 Edge primitives
00200
00300 bettermodel ← FIND_CORNER(pic,cornermodel);
00400
00500 ellipse_coeffs ← CIRC_VIEW(cxf,plane_coeffs,centerlocn,radius)
00600
00700 This computes the coefficients for the ellipse that one would see
00800 if one looked at a circle lieing in the named plane, with its
00900 center at the location stated and its radius as stated.
01000 This primitive may be subsumed by some other function working
01100 off one of the body representations, but it still may be independently
01200 useful.
01300
01400 ecfs2 ← FIND_ELLIPSE(pic,ecfs,contrast,toler)
01500
01600 Finds the best ellipse that matches the requested one. ecfs gives the
01700 model coefficients. Contrast tells whether the inside is darker or
01800 lighter, or what. toler tells how close a match must be.
01900
02000 Correllation primitives.
02100
02200 tvxf ← FEATURE_CORREL(dataframe,firstxf,search,modelframe)
02300
02400 This primitive finds the transform (2-d) that best takes the
02500 image given by the model frame into the data frame. These
02600 frames are essentially TV pictures, with additional information
02700 added. Firstxf is an initial guess trasform. Search -- which
02800 is currently not well defined -- specifies advice about a search
02900 strategy & limits.
03000
03100 (tvxf,cremodel) ← CRE_CORREL(dataframe,firstxf,{{cre models}})
03200
03300 Similar to FEATURE_CORREL except works with a set of cre models
03400 instead of a tv image. This one should be good for fast initial
03500 matches.
03600
03700 Miscellaneous Vision Primitives
03800
03900 (top,bot,l,r) ← FIND_BLOB(pic,top,bot,left,right,
04000 xsizeup,xsizelb,ysizeub,ysizelb,
04100 contrast)
04200
04300 Looks in the picture pic for a "blob" of the indicated
04400 contrast & size & located within the specified window.
04500
04600 Structures
04700
04800 Camera transforms
04900
05000 CAMNUM(x) -- an integer giving the camera number
05100 LENSNUM(x) -- which lens
05200 PAN(x) -- degrees
05300 TILT(x) -- degrees
05400 FOCUS(x) -- focal length = dist of lens center from image plane
05500 TOP(x), BOT(x), LEFT(x), RIGHT(x) -- the TV coords of the screen limits,
05600 based on (0,0) at the raster center. (I know HE does it another
05700 way, but this seems more sensible). I'll let low level things
05800 worry. NOTE: y-pos is up.
05900 LENSX(x),LENSY(x),LENSZ(x) -- locn of lens center in wc
06000 TABLEX(x),TABLEY(x) -- locn on table pierced by lens axis.
06100 CAMXF(x,i,j) -- Camera transform: (u,v,h)=CAMXF*(x,y,z,1)
06200
06300 TV picture
06400
06500 BITS(p) -- number of bits
06600 FILTER(p) -- filter
06700 CXF(p) -- points at camera xf used
06800 PICDV(p) -- dope vect used to calculate a pointer at the actual picture
06900
07000 3 - locn
07100 [x,y,z,w] -- where w is scale factor.
07200
07300 2d locn
07400 [u,v,h] -- h is scale factor
07500
07600 laser pointing info
07700
07800 ACOEFF(x),BCOEFF(x),CCOEFF(x),DCOEFF(x) = planecoeffs
07900 LROT(x), LTILT(x) -- coeffs that go to deflection apparatus.
08000
08100 3d position transforms:
08200
08300 [u,v,w,1] ← XF*[x,y,z,1] (I.E. all normalized)
08400
08500 Useful routine
08600 3dposxf ← ROTATION(a,b,c) = xform to rotate a radians about x-axis, b-radians about
08700 y-axis. c radians about z-axis
08800 3dposxf ← TRANSLATION(a,b,c) = xform to translate x←x+a;y←y+b;z←z+c;
08900 3dposxf ← TRANSF(dx,dy,dz,da,db,dc) = TRANSLATION*ROTATION -- ie. rotate then
09000 translate.
00100
00200 VISION LANGUAGE
00300
00400
00500 I. Primatives
00600
00700
00800 1 FIND_EDGE_POINTS(X1,Y1,X2,Y2;array EP)
00900
01000 This command causes a scan of the Hueckel operator over
01100 the window defined by X1,Y1,X2, and Y2. The edge points
01200 that are found are put into array EP. For each point
01300 the following data are stored:
01400 a) location (X,Y)
01500 b) slope with intensity direction (THETA)
01600 c) perpendicular distance (RHO) from origin of
01700 line defined by the direction of the edge.
01800
01900
02000 2 COURSE_SCAN(X1,Y1,X2,Y2;NSLITS;array EP,PEP)
02100
02200 A course scan is made of the window defined by X1,Y1,X2,
02300 and Y2 using NSLITS slits in both the X and Y directions
02400 and using the edge points in array EP. The X,Y and THETA
02500 of promising points are stored in array PEP.
02600
02700
02800 3 FOLLOW_EDGE_POINTS(X,Y;array EP,S_THETA)
02900
03000 Starting at point X,Y follow edge points in the direction
03100 THETA until a juncture is found. Then reverse and start
03200 at X,Y in the -THETA direction. Fill array S_THETA with
03300 distance along the curve S, and slope THETA of each edge
03400 point.
03500
03600
03700 4 SEGMENT_POINTS(array S_THETA)
03800
03900 The ordered set of points in array S_THETA are segmented
04000 into different curves. In this S-THETA space straight
04100 lines all have zero slope but different intercepts, circles
04200 are straight lines with slope proportional to their radius.
04300
04400
04500 5 FIT_TO LINE(THETA,RHO;array SEP,NOTFIT)
04600
04700 An attempt is made to fit the edge points in array SEP
04800 to a straight line with normal coordinates near (THETA,RHO).
04900 The suggested THETA and RHO values are only approximate
05000 and an iteration process involving separation and least-squares-
05100 fitting results in accurate values for THETA and RHO.
05200 All edge points which do not fit the line are returned in
05300 array NOTFIT.
05400
05500
05600 6 FIT_TO_ARCELLIPSE(X,Y,R,ALPHA,BETA;array SEP,NOTFIT)
05700
05800 An attempt is made to fit the edge points in array SEP
05900 to the arc of an ellipse with parameters near (X,Y,R,ALPHA,
06000 BETA). (X,Y) is the center, R is the major radius, the
06100 orientation and shape are given by the Euler angles ALPHA
06200 and BETA (the ellipse is viewed as a 2-D projection of
06300 a 3-D circular loop). An iteration process involving separation
06400 and least-squares-fitting is done to separate "good" and
06500 "bad" edge points and to accurately determine the parameters.
06600 All edge points which do not fit are returned in array NOTFIT.
06700
06800
06900 7 FIT_TO_GENERAL_CURVE(XX1,YY1,DXDY1,XX2,YY2,DXDY2;
07000 array SEP,NOTFIT)
07100
07200 An attempt is made to fit the edge points in array SEP
07300 to a cubic which passes through one end point (XX1,YY1) with
07400 slope (DXDY1) and passes through the other end (XX2,YY2)
07500 with slope (DXDY2). The data stored is an ordered set of
07600 smooth points. All edge points which do not fit are
07700 returned in array NOTFIT.
07800
07900
08000 8 FIND_MISSING_LINE(X,Y,DX,DY,LPERP,LPARALLEL,DEL_SLOPE)
08100
08200 A suspected line is looked for in a thorough manner. The
08300 edge operator is run with a fine grid over the intensity
08400 points inside a rectangle with one end at X,Y extending
08500 in the direction given by the unit vector DX i + DY j.
08600 LPERP and LPARALLEL are the length of the 2 sides of the
08700 rectangle. All lines found whose slope is within DSLOPE
08800 of the slope of the unit vector are returned.
08900
09000
09100 9 FORM_VERTEX(TYPE_CURVE,NUMBER,WHICH_END)
09200
09300 An attempt is made to form a juncture at the end of the
09400 designated curve with other curves in that region by use
09500 of a local operator. The operator makes a series of tests
09600 and very conservatively forms vertices.
09700
09800
09900 10 TEST_TWO_LINE_VERTEX(LINE1,LINE2,TOLERANCE)
10000
10100 The two lines are intersected and vertex criteria are tested
10200 such as the distance between the ends of the lines and the
10300 intersection point. All other curves are ignored for this test.
10400 If the criteria are satisfied within the tolerance, a vertex is
10500 formed. If not, the TOLERANCE that would be necessary is returned.
10600
10700
10800 11 TEST_THREE_LINE_VERTEX(LINE1,LINE2,LINE3,TOLERANCE1,TOLERANCE2)
10900
11000 A least squares fit to a point is done for the intersection
11100 of the three lines. TOLERANCE1 is compared with the maximum
11200 distance from the intersection point to a line.
11300 Other vertex criteria such as the distance between the ends
11400 of the lines and the intersection point are compared with
11500 TOLERANCE2. All other curves are ignored for this test.
11600 If both tolerances are satisfied a vertex is formed. If not,
11700 the necessary tolerances are returned.
11800
11900
12000 12 FORM_CURVE_BOUNDED_REGION(X,Y;array EP)
12100
12200 Attempt to form a closed region surrounding point (X,Y) using
12300 curves and vertices that border the region. Remaining edge point
12400 data in array EP are used in forming missing links and for
12500 testing to be sure that the closed region is the smallest
12600 homogeneous region surrounding the point.
12700
12800
12900 13 FORM_UNIFORM_INTENSITY_REGION(X,Y;array IP)
13000
13100 Form a closed region surrounding point (X,Y) by region
13200 growing using the intensity points in array IP.
13300
13400
13500
13600 II. Higher-level Operations (top_down)
13700
13800
13900 21 FIND_EDGE(WINDOW,THETA,INTENSITY DIRECTION,TOLERANCE)
14000
14100 Scan the specified WINDOW and return all lines with slope
14200 equal to THETA within the TOLERANCE in order of smallest to
14300 largest deviation from THETA. If intensity direction is
14400 specified, lines with the wrong intensity direction are
14500 eliminated. (See Perkins and Binford, "Corner Finder for
14600 Visual Feedback").
14700
14800
14900 22 FIND_TWO_SIDED_CORNER(WINDOW,THETA1,THETA2,INTENSITY DIRECTION,
15000 TOLERANCE)
15100
15200 Scan the specified WINDOW and return all two-sided corners
15300 which satisfy the slope and intensity specifications of the
15400 model. (See Perkins and Binford, "Corner Finder for
15500 Visual Feedback").
15600
15700
15800
15900 23 FIND_THREE_SIDED_CORNER(WINDOW,THETA1,THETA2,THETA3,
16000 INTENSITY DIRECTION,TOLERANCE)
16100
16200 Scan the specified WINDOW and return all three-sided corners
16300 which satisfy the slope and intensity specifications of the
16400 model. (See Perkins and Binford, "Corner Finder for
16500 Visual Feedback").
16600
16700
16800 24 FIND_HOLE_OR_TOP_OF_ROD(WINDOW,ALPHA,BETA,RADIUS,
16900 INTENSITY DIRECTION,TOLERANCE)
17000
17100 Scan the specified WINDOW for a circular hole or top of
17200 circular rod whose projection is an ellipse with angles
17300 near ALPHA and BETA within the specified TOLERANCE.
17400 Return the location of the center (X,Y), RADIUS R, and
17500 the Euler angles. If only an arc is found, return the
17600 beginning and ending angles.
17700
17800
17900 25 FIND_BOTTOM_OF_ROD(WINDOW,ALPHA,BETA,RADIUS,
18000 INTENSITY DIRECTION,TOLERANCE)
18100
18200 Scan the specified WINDOW for the bottom of a circular rod
18300 whose projection is a particular arc of an ellipse (with angles
18400 which deviate from ALPHA and BETA within the specified TOLERANCE)
18500 that is bordered by two by two straight lines separated by RADIUS.
18600 Return the location of the center (X,Y), RADIUS R, Euler angles
18700 ALPHA AND BETA, and the beginning and ending angles of the arc.
18800
18900
19000 26 FIND_BLOB_RECTANGLE(WINDOW)
19100
19200 Scan the window putting a rectangle around all separate blobs
19300 that are found.
19400
19500
19600 27 FIND_DIFFERENCING_BLOB(WINDOW,LOOK1,LOOK2)
19700
19800 Scan the window at two separate times LOOK1 and LOOK2.
19900 Return rectangle(s) that encloses the blob found by
20000 differencing the two pictures. This is useful for moving objects
20100 and after some object has been dropped during assembly.
20200
20300
20400
20500
20600
20700
20800
20900
21000
21100
21200 ---------- BASIC STRUCTURE ---------------
21300
21400
21500 In order to combine these different primatives and higher-level
21600 operations, certain conventions must be established. For example,
21700 the vertex-forming module will expect a line-forming module to
21800 store the information about each line in a definite format which
21900 it knows about. Further the vertex former must store the vertex
22000 information in a format which the corner finder knows about. This
22100 allows the internal structure and operations of each primitive to
22200 be independent as long as it abides by the conventions. The following
22300 is a possible convention:
22400
22500
22600 Global Variables
22700
22800 NLINES = number of lines present
22900 NELLIPSES = number of ellipses present
23000 NGENCURVES = number of general curves present
23100 NVERTEXS = number of vertices present
23200 NREGIONS = number of regions present
23300 NEDGE1 = number of edge points in array EP1
23400 NEDGE2 = number of edge points in array EP2
23500 NEDGE3 = number of edge points in array EP3
23600
23700
23800 Global Arrays
23900
24000 In the edge-point arrays such as EP1, store for each edge point
24100 the following information:
24200 X -- X location of edge point in window coordinates
24300 Y -- Y location of edge point in window coordinates
24400 THETA -- angle of edge point(range is from 0 to 2π in
24500 order to include intensity direction)
24600 RHO -- perpendicular distance of origin from line
24700 defined by direction of edge
24800
24900
25000 For a line array it is convenient to use a double-index array with
25100 the first index corresponding to the particular line number and
25200 the second index corresponding to the following parameters of the line.
25300
25400 THETA
25500 RHO
25600 Number of edge points
25700 Length of bare line
25800 sin(THETA)
25900 cos(THETA)
26000 Directional sin(THETA) (use in temporary comparison of line's
26100 relation to vertex)
26200 Directional cos(THETA) (use in temporary comparison of line's
26300 relation to vertex)
26400 X coordinate of first end of bare line
26500 Y coordinate of first end of bare line
26600 X coordinate of second end of bare line
26700 Y coordinate of second end of bare line
26800 Number of the vertex which first end is connected to if any
26900 Number of the vertex which second end is connected to if any
27000 X coordinate of vertex of first end if any
27100 Y coordinate of vertex of first end if any
27200 X coordinate of vertex of second end if any
27300 Y coordinate of vertex of second end if any
27400 Number of interior vertex connections
27500 Number of first interior vertex if any
27600 Number of second interior vertex if any
27700 .........
27800 Number of last interior vertex
27900
28000
28100 For an ellipse array it is convenient to use a double-index array with
28200 the first index corresponding to the particular ellipse number and
28300 the second index corresponding to the following parameters of the ellipse.
28400
28500 X coordinate of center of ellipse formed by extending arc
28600 Y coordinate of center of ellipse formed by extending arc
28700 Major radius of ellipse formed by extending arc
28800 ALPHA -- Euler angle of rotated circle
28900 BETA -- Euler angle of rotated circle
29000 THETA1 -- beginning angle of arc
29100 THETA2 -- ending angle of arc
29200 Intensity direction (outward,inward, or both)
29300 sin(ALPHA)
29400 cos(ALPHA)
29500 cos(BETA)
29600 Number of edge points
29700 X coordinate of first end of bare arc if any
29800 Y coordinate of first end of bare arc if any
29900 X coordinate of second end of bare arc if any
30000 Y coordinate of second end of bare arc if any
30100 X coordinate of first end of major axis of ellipse
30200 Y coordinate of first end of major axis of ellipse
30300 X coordinate of second end of major axis of ellipse
30400 Y coordinate of second end of major axis of ellipse
30500 Number of the vertex which first end is connected to if any
30600 Number of the vertex which second end is connected to if any
30700 X coordinate of vertex of first end if any
30800 Y coordinate of vertex of first end if any
30900 X coordinate of vertex of second end if any
31000 Y coordinate of vertex of second end if any
31100 Number of interior vertex connections
31200 Number of first interior vertex if any
31300 Number of second interior vertex if any
31400 .........
31500 Number of last interior vertex
31600
31700
31800 For an general-curve array it is convenient to use a double-index array with
31900 the first index corresponding to the particular general-curve number and
32000 the second index corresponding to the following parameters of the general
32100 curve.
32200
32300 Number of points along curve
32400 Number of edge points
32500 Length of curve
32600 X coordinate of first end of bare curve
32700 Y coordinate of first end of bare curve
32800 DYDX1 -- slope at first bare end
32900 X coordinate of second end of bare curve
33000 Y coordinate of second end of bare curve
33100 DYDX2 -- slope at second bare end
33200 Number of the vertex which first end is connected to if any
33300 Number of the vertex which second end is connected to if any
33400 X coordinate of vertex of first end if any
33500 Y coordinate of vertex of first end if any
33600 X coordinate of vertex of second end if any
33700 Y coordinate of vertex of second end if any
33800 X coordinate of 2nd point along curve
33900 Y coordinate of 2nd point along curve
34000 X coordinate of 3rd point along curve
34100 Y coordinate of 3rd point along curve
34200 ...........
34300 X coordinate of next-to-last point along curve
34400 Y coordinate of next-to-last point along curve
34500
34600
34700 For a vertex array it is convenient to use a triple-index array with
34800 the first index corresponding to the particular vertex number and
34900 the (second,third) indices corresponding to the following parameters
35000 of the vertex.
35100
35200 (X,Y) coordinates of the vertex
35300 (Number of curves,Number of straight lines)
35400 (Number of arcs,Number of general curves)
35500 (Number of 1st curve,Number indicating type of curve)
35600 (Number of 2nd curve,Number indicating type of curve)
35700 .....................
35800 (Number of last curve,Number indicating type of curve)
35900
36000
36100 For a region array it is convenient to use a triple-index array with
36200 the first index corresponding to the particular region number and
36300 the (second,third) indices corresponding to the following parameters
36400 of the region.
36500
36600 (Area of region,Number of curves bounding region)
36700 (Average interior intensity,Variation of interior intensity)
36800 (Number of 1st vertex,Number of curves extending out of that vertex)
36900 (Number of 1st curve,Type of curve)
37000 (Number of 2nd vertex,Number of curves extending out of that vertex)
37100 (Number of 2nd curve,Type of curve)
37200 .....................
37300 (Number of last vertex,Number of curves extending out of that vertex)
37400 (Number of last curve,Type of curve)
37500
00100 SOME POSSIBLE LASER MODULES:
00200
00300 ELEMENTARY OPERATIONS:
00400
00500 1. Manipulate laser- set laser orientation and deflection.
00600
00700 2. Read laser image- read multiple scans seperated by a certain angle.
00800
00900 3. POINT LASER-
01000 a) Point laser plane to pass thru a point specified in 3-d.
01100 b) Point laser to some point in image. This will use feedback and
01200 an initial guess of approximate position of point,if availaible,
01300 can be used advantageously.
01400 You can choose the laser orientation for either case, or a standard
01500 orientation may be used.
01600
01700 SIMPLE PRIMITIVES:
01800
01900 1. Segment an input trace in contiguous blobs(depth discontinuities).
02000 Segment at slope discontinuities.(Useful for detecting corners).
02100
02200 2. Fit curves to segmented trace. Presently can fit Quadratics or Splines.
02300 (Some knowledge about optical geometry makes fitting splines easier
02400 than for a general case).
02500
02600 3. Generate outlines(or parts of outlines to supplement 2-d info).
02700 As a special case can be used for edge finding.
02800
02900 LOCATION OF SPECIFICS IN SCENE:
03000
03100 1. Locate plane surfaces- locate all plane surfaces or particular planes.
03200
03300 2. Locate holes- Holes may be located with partial specifications of
03400 the following parameters: position and orientation of hole,
03500 its size and shape.
03600 Obstructed holes will be harder. Also if inside of the hole is
03700 visible some complications in determining its size and shape occur.
03800
03900 3. Locate Cylinders: Locate specified cylinders. Useful for locating
04000 screws, shaft of the pump etc.
04100
04200
00100 SUMMARY OF RKN LASER PROCESSING PROGRAMS:
00200 The following is a brief summary of various routines in my programs.
00300 Some comments about their capability and possible utility are included.
00400
00500 1. DATA ACQUISITION: Modules to take pictures exist in convenient form.
00600 There are problems of different co-ordinate systems for Hand-eye
00700 than GJA coords.(A problem for all the other programs).
00800 Easy to fix, but care must be taken to assure working with older files.
00900
01000 CALIBRATION: Calibration is availiable in a form that can be used
01100 with hand-eye camera model to give depth information.
01200 There are markers on deflection assembly for initialization.
01300 If absolute depth is desired, some update scheme may be
01400 necessary. A complete calibration is lengthy and complicated.
01500
01600 2. PRE-PROCESSING: Existing routines for thinning. Use calibration but not
01700 essential. Also segments a frame in contiguous blobs, equivalent
01800 of depth continuity detection. No slope discontinuities detected,
01900 however AHB's thinning routines may provide a good starter.
02000
02100 BOUNDARY ORGANIZATION: As it exists, the program can link boundaries
02200 in pictures of complete scenes(i.e. where the two scans cover the
02300 same space). Will work with one set of scans also. Uses 3-d calibration,
02400 to find intersections but can be changed to work without it.
02500 Can use a better intersection finder(using 2d memory).
02600 It likes
02700 to have good input data. Will handle some inconsistencies in input.
02800 If boundary is to be used for later processing(as I do),then efforts at
02900 improving this program may be worthwhile.
03000
03100 3. AXIS FINDING.
03200 a) Projection Programs: provide initial axis guesses and correspondence
03300 information. Exclusively based on boundary information. They work well,
03400 but have problems with data organization( use too much space), several
03500 array bounds may be inadequate. A rewrite may be cost effective.
03600
03700 b) Axis finding and segmentation.: Again uses boundary. Currently
03800 3-d, but can be made availaible in 2-d. Works well if reasonable
03900 initial guesses are fed as input. Some changes in data structures
04000 may be desirable for easier communication with higher level programs.
04100
04200 4. HIGH LEVEL:
04300 a) Overlap: Resolves multiple descriptions. Presently does not attempt
04400 to redescribe by calling the axis finder again. Some parts can be
04500 better described after the obscuring parts have been removed.
04600
04700 b) Joints, description of joints:
04800 c) Matching.
04900 These are likely to be useful in analyzing complete scenes only.
05000 Some matching procedures might be applicable to locating particular
05100 features in a scene and could be modularized. Not many specifics
05200 known at the moment.
05300
05400